Отображение пользовательского содержимого для элемента меню пользовательского аккаунта в Woocommerce 3 - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь отобразить пользовательское уведомление в элементе меню своей учетной записи на основе общей суммы покупок в Woocommerce на основе этого кода ответа:

Пользовательское уведомление о корзине на основе общей суммы покупки в Woocommerce

Это не работает так, как мне бы хотелось. Что я делаю не так?

Это код, который я использую:

add_filter ( 'woocommerce_account_menu_items', 'xu', 40 );
function xu( $menu_links ){

$menu_links = array_slice( $menu_links, 0,3 , true ) 
+ array( 'xu' => 'Xu của bạn' )
+ array_slice( $menu_links, 3, NULL, true );

return $menu_links;

 }

add_action( 'init', 'add_endpoint' );
 function add_endpoint() {

add_rewrite_endpoint( 'xu', EP_PAGES );

}

add_action( 'woocommerce_account_xu_endpoint', 'xuxu' );
 function xuxu() {

 if( ! WC()->session->get( 'purchases_sum' ) ){
        WC()->session->set('purchases_sum', 
  get_customer_total_purchases_sum());
    }

    $total_purchases  = WC()->session->get( 'purchases_sum' );

    if ( $total_purchases == 0 ) return; // We exit (no purchases or non logged users)

    if ( ( 10000 - $total_purchases ) > 0 )
    {

        echo 'You need an extra ' . wc_price( 10000 - $total_purchases ) . ' at all to get a... ';

    }
    else
    {
        echo '... ';
    }
}

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 02 ноября 2018

Пожалуйста, при запросе в StackOverFlow, используйте настоящий английский в своих именах функций, переменных и тексте, так как это для большого сообщества, где английский является языком. Старайтесь всегда давать явные имена.

Чтобы содержимое отображалось для элемента пользовательского меню, вам необходимо обновить правила перезаписи .

Для этого перейдите в «Настройки WordPress»> «Постоянные ссылки» и нажмите «Сохранить изменения». Теперь ваш контент появится.

Вот ваш повторный код (в чистом формате) с некоторыми дополнениями для удаления значения сеанса на странице спасибо:

// Utililty function to get customer's total purchases sum
function get_customer_total_purchases_sum() {
    $current_user_id = get_current_user_id(); // Current user ID

    if( $current_user_id == 0 ) return 0; // we return zero if customer is not logged in

    global $wpdb;

    // return the SQL query (paid orders sum)
    return $wpdb->get_var("SELECT SUM(pm.meta_value) FROM {$wpdb->prefix}postmeta as pm
    INNER JOIN {$wpdb->prefix}postmeta as pm2 ON pm.post_id = pm2.post_id
    INNER JOIN {$wpdb->prefix}posts as p ON pm.post_id = p.ID
    WHERE p.post_status LIKE 'wc-completed' AND p.post_type LIKE 'shop_order'
    AND pm.meta_key LIKE '_order_total' AND pm2.meta_key LIKE '_customer_user'
    AND pm2.meta_value LIKE '$current_user_id'");
}

add_filter ( 'woocommerce_account_menu_items', 'custom_account_menu_items', 10 );
function custom_account_menu_items( $menu_links ){

    $menu_links = array_slice( $menu_links, 0,3 , true )
    + array( 'rewards' => 'Rewards' )
    + array_slice( $menu_links, 3, NULL, true );

    return $menu_links;

}

add_action( 'init', 'add_rewards_account_endpoint' );
function add_rewards_account_endpoint() {
    add_rewrite_endpoint( 'rewards', EP_PAGES );
}

add_action( 'woocommerce_account_rewards_endpoint', 'rewards_account_endpoint_content' );
function rewards_account_endpoint_content() {

    if( ! WC()->session->get( 'purchases_sum' ) ){
        WC()->session->set('purchases_sum', get_customer_total_purchases_sum());
    }

    $total_purchases  = WC()->session->get( 'purchases_sum' );

    if ( $total_purchases == 0 ) return; // We exit (no purchases or non logged users)

    if ( ( 10000 - $total_purchases ) > 0 )
    {

        echo 'You need an extra ' . wc_price( 10000 - $total_purchases ) . ' at all to get a... ';

    }
    else
    {
        echo '... ';
    }
}

// Removing the purchase_sum session value on thankyou page.
add_action( 'template_redirect', 'removing_purchases_sum_session' );
function removing_purchases_sum_session( ) {

    if ( is_wc_endpoint_url('order-received') && WC()->session->get( 'purchases_sum' ) ) {
        // We remove this session variable in thankyou page (if it still exist)
        WC()->session->__unset( 'purchases_sum' );
    }
}

Этот код помещается в файл function.php вашей активной дочерней темы (или темы). Проверено и работает.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...